home *** CD-ROM | disk | FTP | other *** search
/ System Booster / System Booster.iso / CD-ROM Tools / MCDPlayer / Source / Titlelist.c < prev    next >
C/C++ Source or Header  |  1996-09-26  |  10KB  |  320 lines

  1. #include <intuition/intuition.h>
  2. #include <intuition/gadgetclass.h>
  3. #include <libraries/gadtools.h>
  4. #include <graphics/displayinfo.h>
  5. #include <graphics/gfxbase.h>
  6. #include <clib/gadtools_protos.h>
  7. #include <string.h>
  8. #include "mcdplayer.h"
  9.  
  10. #define GD_ListInt                             0
  11. #define GD_ListTitel                           1
  12. #define GD_ListAktTitel                        2
  13. #define GD_ListTitelliste                      3
  14. #define GD_ListSave                            4
  15. #define GD_ListAbbruch                         5
  16. #define GD_ListBenutzen                        6
  17.  
  18. struct Window        *ListWnd = NULL;
  19. struct Gadget        *ListGList = NULL;
  20. struct Gadget        *ListGadgets[7];
  21. WORD                  ListLeft;
  22. WORD                  ListTop;
  23. UWORD                 ListWidth = 348;
  24. UWORD                 ListHeight = 174;
  25. UBYTE                *ListWdt = (UBYTE *)"Titelliste";
  26.  
  27. struct List           TitList;
  28. struct Node           TitNode[100];
  29. char                 *Titles;
  30.  
  31. void InitTitleList( void )
  32.     {
  33.     int i;
  34.  
  35.     if (Titles = AllocMem( 10000, MEMF_ANY|MEMF_CLEAR ))
  36.         {
  37.         NewList( &TitList );
  38.         for( i=0; i<TOC_NumTracks; i++ )
  39.             {
  40.             TitNode[i].ln_Name = &(Titles[i*100]);
  41.             strcpy( &(Titles[i*100]), TOC_Title[i] );
  42.             AddTail( &TitList, &TitNode[i] );
  43.             };
  44.         }
  45.     }
  46.  
  47. void ExitTitleList( int Action ) /* 0=Exit, 1=Use, 2=Save */
  48.     {
  49.     struct StringInfo *sti;
  50.     char *a;
  51.     char Buffer[256];
  52.     int i;
  53.     BPTR FH;
  54.  
  55.     if (Action!=0)
  56.         {
  57.         a = TOC_TitleStrs;
  58.  
  59.         sti = ListGadgets[GD_ListInt]->SpecialInfo;
  60.         strcpy( a, sti->Buffer );
  61.         TOC_CDInterpret = a;
  62.         a += strlen( a )+1;
  63.  
  64.         sti = ListGadgets[GD_ListTitel]->SpecialInfo;
  65.         strcpy( a, sti->Buffer );
  66.         TOC_CDTitle = a;
  67.         a += strlen( a )+1;
  68.  
  69.         for( i=0; i<TOC_NumTracks; i++ )
  70.             {
  71.             strcpy( a, &Titles[i*100] );
  72.             TOC_Title[i] = a;
  73.             a += strlen( a )+1;
  74.             }
  75.         };
  76.  
  77.     if (Action==2)
  78.         {
  79.         sprintf( Buffer, SongPath );
  80.         AddPart( Buffer, TOC_CDID, 130 );
  81.  
  82.         if (FH = Open( Buffer, MODE_NEWFILE ))
  83.             {
  84.             FPuts( FH, TOC_CDInterpret );
  85.             FPutC( FH, '\n' );
  86.             FPuts( FH, TOC_CDTitle );
  87.             FPutC( FH, '\n' );
  88.             for( i=0; i<TOC_NumTracks; i++ )
  89.                 {
  90.                 FPuts( FH, TOC_Title[i] );
  91.                 FPutC( FH, '\n' );
  92.                 };
  93.             Close( FH );
  94.             };
  95.         };
  96.  
  97.     if (Titles) FreeMem( Titles, 10000 );
  98.     }
  99.  
  100. int OpenListWindow( void )
  101.     {
  102.     struct NewGadget     ng;
  103.     struct Gadget       *g;
  104.     UWORD               offx, offy;
  105.  
  106.     if ( ! ( Scr = LockPubScreen( 0 )))
  107.         return( 1L );
  108.  
  109.     PlaceWnd( Scr, ListWidth, ListHeight + offy, &ListLeft, &ListTop, 0 );
  110.  
  111.     if ( ! ( VisualInfo = GetVisualInfo( Scr, TAG_DONE )))
  112.         return( 2L );
  113.  
  114.     offx = Scr->WBorLeft;
  115.     offy = Scr->WBorTop + Scr->RastPort.TxHeight + 1;
  116.  
  117.     if ( ! ( g = CreateContext( &ListGList )))
  118.         return( 1L );
  119.  
  120.     ng.ng_LeftEdge        =    offx + 84;
  121.     ng.ng_TopEdge         =    offy + 2;
  122.     ng.ng_Width           =    250;
  123.     ng.ng_Height          =    14;
  124.     ng.ng_GadgetText      =    (UBYTE *)"Interpret";
  125.     ng.ng_TextAttr        =    &topaz8;
  126.     ng.ng_GadgetID        =    GD_ListInt;
  127.     ng.ng_Flags           =    PLACETEXT_LEFT;
  128.     ng.ng_VisualInfo      =    VisualInfo;
  129.  
  130.     g = CreateGadget( STRING_KIND, g, &ng, GTST_MaxChars, 100, GTST_String, TOC_CDInterpret, TAG_DONE );
  131.  
  132.     ListGadgets[ 0 ] = g;
  133.  
  134.     ng.ng_TopEdge         =    offy + 17;
  135.     ng.ng_GadgetText      =    (UBYTE *)"CD-Titel ";
  136.     ng.ng_GadgetID        =    GD_ListTitel;
  137.  
  138.     g = CreateGadget( STRING_KIND, g, &ng, GTST_MaxChars, 100, GTST_String, TOC_CDTitle, TAG_DONE );
  139.  
  140.     ListGadgets[ 1 ] = g;
  141.  
  142.     ng.ng_TopEdge         =    offy + 140;
  143.     ng.ng_GadgetText      =    (UBYTE *)"Titel    ";
  144.     ng.ng_GadgetID        =    GD_ListAktTitel;
  145.  
  146.     g = CreateGadget( STRING_KIND, g, &ng, GTST_MaxChars, 100, TAG_DONE );
  147.  
  148.     ListGadgets[ 2 ] = g;
  149.  
  150.     ng.ng_TopEdge         =    offy + 32;
  151.     ng.ng_Height          =    120;
  152.     ng.ng_GadgetText      =    NULL;
  153.     ng.ng_GadgetID        =    GD_ListTitelliste;
  154.     ng.ng_Flags           =    0;
  155.  
  156.     g = CreateGadget( LISTVIEW_KIND, g, &ng, GTLV_Labels, &TitList, GTLV_ShowSelected, ListGadgets[2], TAG_DONE );
  157.  
  158.     ListGadgets[ 3 ] = g;
  159.  
  160.     ng.ng_LeftEdge        =    offx + 5;
  161.     ng.ng_TopEdge         =    offy + 153;
  162.     ng.ng_Width           =    80;
  163.     ng.ng_Height          =    14;
  164.     ng.ng_GadgetText      =    (UBYTE *)"Sichern";
  165.     ng.ng_GadgetID        =    GD_ListSave;
  166.     ng.ng_Flags           =    PLACETEXT_IN;
  167.  
  168.     g = CreateGadget( BUTTON_KIND, g, &ng, TAG_DONE );
  169.  
  170.     ListGadgets[ 4 ] = g;
  171.  
  172.     ng.ng_LeftEdge        =    offx + 254;
  173.     ng.ng_GadgetText      =    (UBYTE *)"Abbruch";
  174.     ng.ng_GadgetID        =    GD_ListAbbruch;
  175.  
  176.     g = CreateGadget( BUTTON_KIND, g, &ng, TAG_DONE );
  177.  
  178.     ListGadgets[ 5 ] = g;
  179.  
  180.     ng.ng_LeftEdge        =    offx + 128;
  181.     ng.ng_GadgetText      =    (UBYTE *)"Benutzen";
  182.     ng.ng_GadgetID        =    GD_ListBenutzen;
  183.  
  184.     g = CreateGadget( BUTTON_KIND, g, &ng, TAG_DONE );
  185.  
  186.     ListGadgets[ 6 ] = g;
  187.  
  188.     if ( ! g )
  189.         return( 2L );
  190.  
  191.     if ( ! ( ListWnd = OpenWindowTags( NULL,
  192.                     WA_Left,          ListLeft,
  193.                     WA_Top,           ListTop,
  194.                     WA_Width,         ListWidth,
  195.                     WA_Height,        ListHeight + offy,
  196.                     WA_IDCMP,         STRINGIDCMP|LISTVIEWIDCMP|BUTTONIDCMP|IDCMP_CLOSEWINDOW|IDCMP_REFRESHWINDOW,
  197.                     WA_Flags,         WFLG_DRAGBAR|WFLG_DEPTHGADGET|WFLG_CLOSEGADGET|WFLG_SMART_REFRESH|WFLG_ACTIVATE,
  198.                     WA_Gadgets,       ListGList,
  199.                     WA_Title,         ListWdt,
  200.                     WA_PubScreen,     Scr,
  201.                     TAG_DONE )))
  202.         return( 4L );
  203.  
  204.     GT_RefreshWindow( ListWnd, NULL );
  205.     UnlockPubScreen( NULL, Scr );
  206.     Scr = NULL;
  207.  
  208.     return( 0L );
  209. }
  210.  
  211. void CloseListWindow( void )
  212. {
  213.     if ( ListWnd        )
  214.         {
  215.         CloseWindow( ListWnd );
  216.         ListWnd = NULL;
  217.         }
  218.  
  219.     if ( ListGList      )
  220.         {
  221.         FreeGadgets( ListGList );
  222.         ListGList = NULL;
  223.         }
  224.  
  225.     if ( VisualInfo )
  226.         {
  227.         FreeVisualInfo( VisualInfo );
  228.         VisualInfo = NULL;
  229.         }
  230.  
  231.     if ( Scr )
  232.         {
  233.         UnlockPubScreen( NULL, Scr );
  234.         }
  235. }
  236.  
  237. void TitleList( void )
  238.     {
  239.     ULONG  GClass;
  240.     USHORT GCode;
  241.     struct Gadget *GList = 0l;
  242.     struct IntuiMessage  *msg;
  243.     struct StringInfo *sti;
  244.     int Exit = 0;
  245.     int AktTitel = -1;
  246.  
  247.     InitTitleList();
  248.     if (OpenListWindow()==0)
  249.         {
  250.         while( !Exit )
  251.             {
  252.             Wait( 1<<ListWnd->UserPort->mp_SigBit );
  253.             while ( (!Exit) && (msg = (struct IntuiMessage *) GT_GetIMsg( ListWnd->UserPort ) ))
  254.                 {
  255.                 GClass  = msg->Class;
  256.                 GCode   = msg->Code;
  257.                 if (GClass & (GADGETDOWN | GADGETUP | MOUSEMOVE) )
  258.                     GList   = (struct Gadget *) msg->IAddress;
  259.             GT_ReplyIMsg(msg);
  260.  
  261.                 switch (GClass)
  262.                     {
  263.                     case IDCMP_CLOSEWINDOW:
  264.                         ExitTitleList(0);
  265.                         CloseListWindow();
  266.                         Exit = 1;
  267.                         break;
  268.                     case IDCMP_GADGETUP:
  269.                         switch (GList->GadgetID)
  270.                             {
  271.                             case GD_ListAktTitel:
  272.                                 if (AktTitel!=-1)
  273.                                     {
  274.                                     sti = ListGadgets[GD_ListAktTitel]->SpecialInfo;
  275.                                     strcpy( &Titles[AktTitel*100], sti->Buffer );
  276.                                     if (AktTitel<TOC_NumTracks-1) AktTitel++;
  277.                                     GT_SetGadgetAttrs(ListGadgets[GD_ListTitelliste], ListWnd, 0, GTLV_Labels, &TitList, GTLV_Selected, AktTitel, TAG_DONE);
  278.                                     ActivateGadget(ListGadgets[GD_ListAktTitel], ListWnd, NULL );
  279.                                     };
  280.                                 break;
  281.                             case GD_ListTitelliste:
  282.                                 AktTitel = GCode;
  283.                                 ActivateGadget(ListGadgets[GD_ListAktTitel], ListWnd, NULL );
  284.                                 break;
  285.                             case GD_ListInt:
  286.                                 ActivateGadget(ListGadgets[GD_ListTitel], ListWnd, NULL );
  287.                                 break;
  288.                             case GD_ListTitel:
  289.                                 ActivateGadget(ListGadgets[GD_ListInt], ListWnd, NULL );
  290.                                 break;
  291.                             case GD_ListSave:
  292.                                 ExitTitleList(2);
  293.                                 CloseListWindow();
  294.                                 Exit = 1;
  295.                                 break;
  296.                             case GD_ListAbbruch:
  297.                                 ExitTitleList(0);
  298.                                 CloseListWindow();
  299.                                 Exit = 1;
  300.                                 break;
  301.                             case GD_ListBenutzen:
  302.                                 ExitTitleList(1);
  303.                                 CloseListWindow();
  304.                                 Exit = 1;
  305.                                 break;
  306.                             };
  307.                         break;
  308.                     };
  309.                 };
  310.             };
  311.         }
  312.     if (!Exit)
  313.         {
  314.         CloseListWindow();
  315.         ExitTitleList(0);
  316.         };
  317.     }
  318.  
  319.  
  320.